package cc.geguol.draggerdemo.xiaochuang;

import android.content.Context;
import android.content.res.AssetManager;

import java.util.concurrent.TimeUnit;

import dagger.Module;
import dagger.Provides;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;

/**
 * 作者  格锅
 * 时间  2016/12/29 18:24
 * 文件  DraggerDemo
 * 描述  创建一个依赖工厂;
 *
 * 这个类分别创建了两个Dependency,OkHttpClient 和Retrofit；
 * 如何让 仓库管理员知道呢？
 *
 * 需要用：@Providers 注解来标记
 *
 * 当管理员 需要一个Retrofit对象时，他会先找到产生okHttpClient的provider
 *
 * 可能：如果所需要的参数 提供的方放没法生产如何解决？
 *
 * 1、在构造函数中传入所需的依赖对象
 * 2、定义一个提供该对象的provider
 * 实例：context
 */

@Module
public class AppModule {

	private final Context context;

	public AppModule(Context context) {
		this.context = context;
	}

	@Provides
	public Context providerContext(){
		return context;
	}

	@Provides
	public AssetManager providerAsset(Context context){
		return context.getAssets();
	}



	@Provides
	public OkHttpClient provideOkHttpClient(){
		OkHttpClient okHttpClient = new OkHttpClient()
				.newBuilder().connectTimeout(30, TimeUnit.SECONDS)
				.build();
		return okHttpClient;
	}
	@Provides
	public Retrofit provideRetrofit(OkHttpClient okHttpClient){
		Retrofit retrofit = new Retrofit.Builder()
				.client(okHttpClient)
				.baseUrl("http://api.github.com")
				.build();
		return retrofit;
	}


}
